﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace TD.bom
{
    /// <summary>
    /// Template d'une tour, i.e. ensemble d'éléments permettant de créer une tour
    /// </summary>
    public class TowerTemplate : TemplateBase
    {
        #region Propriétés

        /// <summary>
        /// Prix d'un upgrade de la tour
        /// </summary>
        public int[] UpgradePrice { get; private set; }

        /// <summary>
        /// Prix d'achat de la tour
        /// </summary>
        public int Price { get; private set; }

        #endregion

        /// <summary>
        /// Obtient un template de tour
        /// </summary>
        /// <param name="p_templateName">Nom du template</param>
        /// <returns>Instance de TowerTemplate si trouvé, null sinon</returns>
        public new static TowerTemplate Get(string p_templateName)
        {
            // On regarde d'abord si le template existe en cache
            TowerTemplate l_template = (TowerTemplate)TemplateBase.Get(p_templateName);
            if (l_template != null)
            {
                // Si oui, on le renvoie
                return l_template;
            }

            // Sinon, il faut le charger
            l_template = Load(p_templateName);
            if (l_template != null)
            {
                // Et le mettre en cache pour la prochaine fois
                m_cache.Add(p_templateName, l_template);
            }

            return l_template;
        }

        /// <summary>
        /// Charge le template ayant le nom spécifié
        /// </summary>
        /// <param name="p_templateName">Nom du template à charger</param>
        /// <returns>Instance de TowerTemplate si trouvé, null sinon</returns>
        protected static TowerTemplate Load(string p_templateName)
        {
            // TODO : implémenter un chargement à partir d'un entrepôt quelconque
            // serveur (par service web), ressources...
            TowerTemplate l_template = new TowerTemplate();

            switch (p_templateName)
            {
                case "tower/1":
                    {
                        l_template.UpgradePrice = new int [] {10, 10, 10};
                        l_template.Price = 5;
                        break;
                    }

                case "tower/2":
                    {
                        l_template.UpgradePrice = new int[] { 0, 10, 10 };
                        l_template.Price = 5;
                        break;
                    }

                case "tower/3":
                    {
                        l_template.UpgradePrice = new int[] { 0, 10, 30 };
                        l_template.Price = 1;
                        break;
                    }

                default:
                    {
                        throw new ArgumentOutOfRangeException("p_templateName", "Ce template de tour n'existe pas");
                    }
            }

            return l_template;
        }
    }
}
